package com.ark.security.service;

import com.ark.common.exception.ServiceException;
import com.ark.common.response.Result;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import javax.mail.MessagingException;
import javax.mail.internet.InternetAddress;
import java.util.Date;

@Component
public class MailService {

    /**
     * 注入邮件工具类
     */
    @Resource
    private JavaMailSenderImpl javaMailSender;

    @Value("${spring.mail.username}")
    private String sendMailer;

    /**
     * 检测邮件信息类
     * @param to 收信人
     * @param subject 主题
     * @param text Message
     */
    private void checkMail(String to,String subject,String text){
        if(StringUtils.isEmpty(to)){
            throw new RuntimeException("邮件收信人不能为空");
        }
        if(StringUtils.isEmpty(subject)){
            throw new RuntimeException("邮件主题不能为空");
        }
        if(StringUtils.isEmpty(text)){
            throw new RuntimeException("邮件内容不能为空");
        }
    }

    /**
     * 发送纯文本邮件
     * @param to 收信人
     * @param subject 主题
     * @param text 消息
     */
    public void sendHtmlTextMailMessage(String to,String subject,String text){
        try {
            MimeMessageHelper messageHelper = new MimeMessageHelper(javaMailSender.createMimeMessage(), true);
            //邮件发信人
            messageHelper.setFrom(new InternetAddress( "游戏平台 <" + sendMailer + ">"));
            //邮件收信人
            messageHelper.setTo(to.split(","));
            //邮件主题
            messageHelper.setSubject(subject);
            //邮件内容
            messageHelper.setText(text, true);
            // 邮件发送时间
            messageHelper.setSentDate(new Date());
            //正式发送邮件
            javaMailSender.send(messageHelper.getMimeMessage());
        } catch (MessagingException e) {
            throw new ServiceException(Result.error(e.getMessage()));
        }
    }

    /**
     * 发送邮箱验证码
     * @param to 收信人
     * @param code 验证码
     */
    public void sendHtmlTextMailCode(String to, String code) {
        // 构建包含背景颜色的 HTML 内容
        String message = "<div style='max-width: 600px; font-size: 18px; font-family: Arial, sans-serif;font-weight: 300;'>" +
                "<div style='line-height: 60px;background-color:#0078d4;text-align: center;font-weight: 300; color: #fff;'>欢迎使用 ARK 游戏平台</div>" +
                "<div style='border: 1px solid #0078d4;padding: 10px;'>"+
                "<p style='font-size: 16px; color: #555;'>我们收到了您对用于 ARK 游戏平台的一次性代码的请求。</p>" +
                "<p style='font-size: 18px; color: #333;'>您的验证码为：</p>" +
                "<div style='text-align: center; margin: 15px 0 20px 0;'>" +
                "<span style='font-size: 24px; font-weight: bold; color: #ff4500;'><u>" + code + "</u></span>" +
                "</div>" +
                "<p style='font-size: 14px; color: #555;'>如果您没有请求此代码，您可以安全地忽略此电子邮件。其他人可能错误输入了您的电子邮件地址。</p>" +
                "</div>" +
                "</div>" ;

        // 调用发送邮件的方法
        sendHtmlTextMailMessage(to, "ARK 游戏平台验证码", message);
    }

    public void sendHtmlTextMailNotice(String to, String username, String password) {
        // 构建包含背景颜色的 HTML 内容
        String message = "<div style='max-width: 600px; font-size: 18px; font-family: Arial, sans-serif;font-weight: 300;'>" +
                "<div style='line-height: 60px;background-color:#0078d4;text-align: center;font-weight: 300; color: #fff;'>账号注册成功通知!</div>" +
                "<div style='border: 1px solid #0078d4;padding: 10px;'>"+
                "<p style='font-size: 16px; color: #555;'>欢迎使用 ARK 游戏平台！以下是您注册的账号及密码</p>" +
                "<p style='font-size: 16px; color: #333;'>登录账号："+username+"</p>" +
                "<p style='font-size: 16px; color: #333;'>登录密码："+password+"</p>" +
                "</div>" +
                "</div>" ;

        // 调用发送邮件的方法
        sendHtmlTextMailMessage(to, "ARK 游戏平台通知", message);
    }
}
